/* 
 * File:   RecursoUtil.cpp
 * Author: Usuario
 * 
 * Created on 30 de abril de 2013, 12:09
 */

#include "RecursoUtil.h"
#include "Permisos.h"
#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

/**@brief Constructor por defecto
 */
RecursoUtil::RecursoUtil() {
}

/**@brief Constructor de copia*/
RecursoUtil::RecursoUtil(const RecursoUtil& orig) {
}

/**Destructor de la clase RecursoUtil
 */
RecursoUtil::~RecursoUtil() {
}
/**
 * @brief Interpreta los permisos que pasa el usuario como numeros a booleanos según el sistema de numeros que utiliza Linux en los permisos 
 * @param perm int numero que el usuario asigna como permisos
 * @param lectura bool permiso de lectura
 * @param escritura bool permiso de escritura
 * @param ejecucion bool permiso de ejecucion
 */
void RecursoUtil::InterpretarPermisos(int perm, bool *lectura, bool *escritura, bool *ejecucion){
        
        switch(perm){
            case 0:
                break;
            case 1:
                *lectura=false;
                *escritura=false;
                *ejecucion=true;
                break;
            case 2:
                *lectura=false;
                *escritura=true;
                *ejecucion=false;
                break;
            case 3:
                *lectura=false;
                *escritura=true;
                *ejecucion=true;
                break;
            case 4:
                *lectura=true;
                *escritura=false;
                *ejecucion=false;
                break;
            case 5:
                *lectura=true;
                *escritura=false;
                *ejecucion=true;
                break;
            case 6:
                *lectura=true;
                *escritura=true;
                *ejecucion=false;
                break;
            case 7:
                *lectura=true;
                *escritura=true;
                *ejecucion=true;
                break;
            default:
                cout<<"El numero para identificar los permisos debe estar comprendido entre 0 y 7 ambos incluidos."<<endl;
                
        }
}
/**
 * @brief Transforma los permisos de boolean a string para mostrarlos por pantalla
 * @param p Permisos* puntero a los permisos del recurso
 * @return  string Devuelve una cadena del tipo "rwx" segun los permisos que tenga el recurso
 */
string RecursoUtil::PermToString(Permisos *p){
    stringstream ss;
    string resultado="";
    if(p->GetLectura()){
        ss<<"r";
    }else{
        ss<<"-";
    }
    if(p->GetEscritura()){
        ss<<"w";
    }else{
        ss<<"-";
    }
    if(p->GetEjecucion()){
        ss<<"x";
    }else{
        ss<<"-";
    }
    getline(ss,resultado);
    return resultado;
}
